<?php
class DataLayer{
	
	protected $lk;
	protected $result;
	protected $sql;

	/**
	 * 
	 * @desc SELECT
	 * Pode-se passar os elementos da clausula select ou a clausula inteira atraves da variavel $sql
	 * @param string $sql
	 * @param string $campos
	 * @param string $from
	 * @param string $complemento
	 * @return mixed $array
	*/
	public function select($sql='',$campos='',$from='', $complemento=''){
		
		if($sql == ""){ //montar clausula
		
			if ($campos != "*"){
				for($i=0;$i<count($campos);$i++)
					$fields .= $campos[$i].",";
				$fields = substr($fields, 0, strrpos($fields, ","));
			}else{
				$fields = $campos;
			}

			$sql = "select ".$fields." from ".$from." ".$complemento;
			
		}
		
		$cons = $this->lk->sql_query($sql);
		$array = array();

		while ($row = $this->lk->sql_fetchrow($cons)){
			if (isset($key))
				$array[$row[$key]] = $row;
			else
				$array[] = $row;
		}

		//file_put_contents(DIRETORIO."sql_select.txt", $sql);

		return $array;
	}

	public function getNumberRows(){
		//Para funcionar esta função o select deve possuir este comando SQL_CALC_FOUND_ROWS
		$cons = $this->lk->sql_query("SELECT FOUND_ROWS() total");
		return $this->lk->sql_fetchrow($cons)->total;
	}


	/**
	 * 
	 * @desc INSERT
	 * @param string $tabela
	 * @param array $dados
	 * @param string $data
	 * @return int $id
	*/
	public function insert($tabela, $dados, $data=""){
		$sql  =   "INSERT INTO ".$tabela." (";
		$i=0; //contador do foreach

		// Nome dos Campos
		foreach ($dados as $key => $value){
			$sql .= $key . ",";
		}

		$sql = substr($sql, 0, strrpos($sql, ",")); //tirar a ultima virgula

		// Campo de Data
		if ($data != "")
			$sql .= ", $data) VALUES (";
		else
			$sql .= ") VALUES (";

		// Valores dos campos
		foreach ($dados as $key => $value){
			if($value === NULL)
				$sql .= "NULL,";
			else	
				$sql .= "'".Util::encodeText($value)."',";
		}

		$sql = substr($sql, 0, strrpos($sql, ",")); //tirar a ultima virgula

		// Campo de Data
		if ($data != "")
			$sql .= ", now())";
		else
			$sql .= ")";
		
		//echo $sql;
		//file_put_contents(DIRETORIO."sql_insert.txt", $sql);

		$this->lk->sql_query($sql);

		$id = mysql_insert_id();
		return $id;
	}



	/**
	 * 
	 * @desc UPDATE
	 * @param string $tabela
	 * @param array $dados
	 * @param array $where
	 * @param string $data
	 * @return int $id
	*/
	public function update($tabela, $dados, $where, $data=""){
		$sql  =   "update ".$tabela." set ";
		foreach ($dados as $key => $val){
			if ($key == "submit" || $key == "mode" || $key == "token"  || strstr($key, "arquivo") || strstr($key, "legenda"))
				unset($dados[$key]);
		}

		foreach ($dados as $key => $value){
			if($value === NULL)
				$sql .= '`'.$key."` = NULL,";
			else
				$sql .= '`'.$key."` = '".Util::encodeText($value)."',";
		}			


		$sql = substr($sql, 0, strrpos($sql, ",")); //tirar a ultima virgula

		if ($data != "") //tem que atualizar data
			$sql .=", ".$data."=now()";

		$sql .= " where ".$where;
		
		//file_put_contents(DIRETORIO."sql_insert.txt", $sql);

		if ($this->lk->sql_query($sql))
			return true;
		else
			return false;

	}

	/**
	 * 
	 * @desc NEXTID
	 * @param string $tabela
	 * @return int $nextId
	*/
	public function nextId($tabela){
		$sql = "SELECT AUTO_INCREMENT FROM information_schema.tables where table_name = '".$tabela."'";
		$result = $this->select($sql);

		return $result[0]->AUTO_INCREMENT;
	}

	/**
	 * 
	 * @desc DELETE
	 * @param string $tabela
	 * @param string $where
	*/
	public function delete($tabela, $where){
		$sql = "delete from ".$tabela." where ".$where;
		return $this->lk->sql_query($sql);
	}
}
?>
